
package Formulario;

// imports
import java.awt.Color;
import java.text.DecimalFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class GerarGrafico {
    
    private ChartPanel GraficoPronto;// armazena o grafico desenhado
    private  JFreeChart grafico;// armazena os dados do grafico

    //recebe os dados do banco e a quantidade de empresas que ira listar
    public void VendasXEmpresas(String[][] dadosFisico,String [][]dadosJuridico,int quantidade){
       DefaultCategoryDataset dados = new DefaultCategoryDataset();// cria a categoria padrao
       for(int i=0; i<dadosFisico.length;i++)// e percorre pelo vetor de dados
              dados.setValue(transformaFloat(dadosFisico[i][1]),dadosFisico[i][0], "Valores");
       for(int i=0;i<dadosJuridico.length;i++)
       dados.setValue(transformaFloat(dadosJuridico[i][1]),dadosJuridico[i][0], "Valores");
              // armazena os dados no grafico
       if(dados.getRowCount()>quantidade){
        
           for(int i=dados.getRowCount()-1; i>quantidade;i--)
             dados.removeRow(i);
        }
       // assim ele cria o grafico com os dados anteriormente e as especificacoes listadas
        grafico = ChartFactory.createBarChart(
            "Grafico de Vendas X Empresas", // chart title
            "Categorias", // domain axis label
            "Valor de Seguros", // range axis label
            dados, // data
            PlotOrientation.VERTICAL, // orientation
            true, // include legend
            true, // tooltips?
            false // URLs?
        );

       GraficoPronto = new ChartPanel(grafico);// desenha o grafico
    }

    //metodo para criar o grafico de vendas no mes recebe o vetor de dados do banco
    public void Vendas(String[][] consulta){
       DefaultCategoryDataset dados = new DefaultCategoryDataset();//cria a categoria padrao
       for(int i=0;i<consulta.length;i++){// percorre o vetor do banco
           dados.setValue(transformaFloat(consulta[i][0]),consulta[i][1], "Seguro");
           //e armazena os dados
           /**
            * Estes dados foram pegados na Classe banco ficando todo o trabalho bruto de manusea-los la
            * por o banco ser mais rapido que a aplicacao para esse fim
            */
       }

        // assim ele cria o grafico com os dados anteriormente e as especificacoes listadas
        grafico = ChartFactory.createBarChart(
            "Grafico de Vendas por mês", // chart title
            "Meses", // domain axis label
            "Valor de Seguros", // range axis label
            dados, // data
            PlotOrientation.VERTICAL, // orientation
            true, // include legend
            true, // tooltips?
            false // URLs?
        );


       GraficoPronto = new ChartPanel(grafico);// desenha o grafico

    }

      public void Funcionario(String[][] consulta) {
         DefaultCategoryDataset dados = new DefaultCategoryDataset();//cria a categoria padrao
       for(int i=0;i<consulta.length;i++){// percorre o vetor do banco
           dados.setValue(transformaFloat(consulta[i][1]),consulta[i][0], "Funcionario");
           //e armazena os dados
           /**
            * Estes dados foram pegados na Classe banco ficando todo o trabalho bruto de manusea-los la
            * por o banco ser mais rapido que a aplicacao para esse fim
            */
       }

        // assim ele cria o grafico com os dados anteriormente e as especificacoes listadas
        grafico = ChartFactory.createBarChart(
            "Grafico de Vendas por Funcionario", // chart title
            "Funcionario", // domain axis label
            "Valor de Seguros", // range axis label
            dados, // data
            PlotOrientation.VERTICAL, // orientation
            true, // include legend
            true, // tooltips?
            false // URLs?
        );


       GraficoPronto = new ChartPanel(grafico);// desenha o grafico

    }

    public void Balanco(String[] consulta) {
       DefaultCategoryDataset dados = new DefaultCategoryDataset();//cria a categoria padrao
           dados.setValue(transformaFloat(consulta[0]),"Seguros", "Seguro");
           dados.setValue(transformaFloat(consulta[1]),"Despesas", "Seguro");
           dados.setValue(transformaFloat(consulta[2]),"Balanço", "Seguro");
           //e armazena os dados
           /**
            * Estes dados foram pegados na Classe banco ficando todo o trabalho bruto de manusea-los la
            * por o banco ser mais rapido que a aplicacao para esse fim
            */

        // assim ele cria o grafico com os dados anteriormente e as especificacoes listadas
        grafico = ChartFactory.createBarChart(
            "Grafico de Vendas por mês", // chart title
            "Meses", // domain axis label
            "Valor de Seguros", // range axis label
            dados, // data
            PlotOrientation.VERTICAL, // orientation
            true, // include legend
            true, // tooltips?
            false // URLs?
        );


       GraficoPronto = new ChartPanel(grafico);// desenha o grafico
    }


    //metodo para retornar o grafico pronto para alguem
    public ChartPanel getGrafico(){
        return GraficoPronto;
    }

        //metodo para transformar uma string em float
   public  float transformaFloat(String numero){
        float valor = 0;
        char n[] = numero.toCharArray();
        numero="";
        for(int i=0;i<n.length;i++){
            if(n[i]==',')
                n[i]='.';//substitui o , por .
            numero+=n[i];//e continua armazenando a string
        }
        try{
            valor = Float.parseFloat(numero);
        }catch(Exception e){
        e.printStackTrace();
        }
        return valor;
    }



   
}
